package com.detech.sbmh.base.hibernate.log.dao;

import com.detech.sbmh.base.hibernate.custom.CustomDAO;
import com.detech.sbmh.base.hibernate.log.entity.TbLogP6Spy;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * P6spy性能监控日志表(TbLogP6Spy)
 *
 * @author 方安伦
 * @since 2021-12-28 15:29:23
 */
 @Repository
public class TbLogP6spyDAO extends CustomDAO {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    public TbLogP6Spy findById(String id){
		try {
			TbLogP6Spy instance = (TbLogP6Spy) getCurrentSession().get("com.detech.sbmh.base.hibernate.log.entity.TbLogP6Spy",
					id);
			return instance;
		} catch (RuntimeException re) {
			throw re;
		}
	}

	/**
	* 根据字段查询数据
	* @param propertyName
	* @param value
	*/
	public List findByPropertyList(String propertyName, Object value) {
		try {
			String queryString = "from TbLogP6Spy as model where model." + propertyName + "=:arg0";
			Query queryObject = getCurrentSession().createQuery(queryString);
			queryObject.setParameter("arg0", value);
			return queryObject.list();
		} catch (RuntimeException re) {
			throw re;
		}
	}
	
	/**
	* 根据字段查询，返回第一条数据
	* @param propertyName
	* @param value
	*/
	public TbLogP6Spy findByPropertyObject(String propertyName, Object value) {
		try {
			String queryString = "from TbLogP6Spy as model where model." + propertyName + "=:arg0";
			Query queryObject = getCurrentSession().createQuery(queryString);
			queryObject.setParameter("arg0", value);
			List<TbLogP6Spy> list = queryObject.list();
			if(list!=null && list.size()>0){
			    return list.get(0);
			}else{
			    return null;
			}
		} catch (RuntimeException re) {
			throw re;
		}
	}

    /**
     * 新增数据
     *
     * @param transientInstance 实例对象
     */
    public void save(TbLogP6Spy transientInstance){
		try {
			getCurrentSession().save(transientInstance);
		} catch (RuntimeException re) {
			throw re;
		}
	}

    /**
     * 新增或更新数据
     *
     * @param instance 实例对象
     */
    public void saveOrUpdate(TbLogP6Spy instance){
		try {
			getCurrentSession().saveOrUpdate(instance);
		} catch (RuntimeException re) {
			throw re;
		}
	}

    /**
     * 修改数据
     *
     * @param instance 实例对象
     */
    public void update(TbLogP6Spy instance){
		this.getCurrentSession().update(instance);
	}

    /**
     * 删除数据
     *
     * @param persistentInstance 实例对象
     */
    public void delete(TbLogP6Spy persistentInstance){
		try {
			getCurrentSession().delete(persistentInstance);
		} catch (RuntimeException re) {
			throw re;
		}
	}
	
    /**
    * 查询方法（单参数）
    *
    * @param hql 查询HQL语句
    * @param val 查询参数
    */
	public List find(String hql,Object val) {
		hql = sqlToHibernate5(hql);
		Query query = this.getCurrentSession().createQuery(hql);
		if(val!=null){
			query.setParameter(0, val);
		}
		return query.list();
	}
	
	/**
    * 查询方法（任意多个参数）
    *
    * @param hql 查询HQL语句
    * @param values 任意多个参数
    */
	public List find(String hql,Object... values) {
		hql = sqlToHibernate5(hql);
		Query query = this.getCurrentSession().createQuery(hql);
		if(values!=null){
			for(int i=0;i<values.length;i++){
				query.setParameter(i, values[i]);
			}
		}
		return query.list();
	}

    /**
    * 查询方法（参数列表）
    *
    * @param hql 查询HQL语句
    * @param params 参数列表
    */
	public List find(String hql,List params) {
		hql = sqlToHibernate5(hql);
		Query query = this.getCurrentSession().createQuery(hql);
		if(params!=null && params.size()>0){
		    for(int i=0;i<params.size();i++){
			query.setParameter(i, params.get(i));
		    }
		}
		return query.list();
	}
	
    /**
    * 批量更新方法（单参数）
    *
    * @param hql 更新HQL语句
    * @param val 单个参数
    */
	public int bulkUpdate(String hql,Object val){
		hql = sqlToHibernate5(hql);
		Query query = this.getCurrentSession().createQuery(hql);
		if(val!=null){
			query.setParameter(0, val);
		}
		return query.executeUpdate();
	}
	
	/**
    * 批量更新方法（任意多个参数）
    *
    * @param hql 更新HQL语句
    * @param vals 任意多个参数
    */
	public int bulkUpdate(String hql,Object... vals){
		hql = sqlToHibernate5(hql);
		Query query = this.getCurrentSession().createQuery(hql);
		if(vals!=null){
			for(int i=0;i<vals.length;i++){
				query.setParameter(i, vals[i]);
			}
		}
		return query.executeUpdate();
	}
	
	/**
    * 查询全部数据
    */
	public List findAll() {
		try {
			String queryString = "from TbLogP6Spy";
			Query queryObject = getCurrentSession().createQuery(queryString);
			return queryObject.list();
		} catch (RuntimeException re) {
			throw re;
		}
	}
}

